/**
 * 给定一个含有n个正整数的数组和一个正整数s，找出该数组中满足其和>=s的长度最小的连续子数组，并返回其长度。
 * 如果不存在符合条件的子数组，返回0
 * 示例一:
 * 输入: s = 7, nums = [2, 3, 1, 2, 4, 3]
 * 输出: 2
 * 解释: 子数组[4, 3]是该条件下的长度最小的子数组
*/
function minSubArrayLen (s, nums) {
    let i = 0;
    let j = 0;
    let result = 0;
    let min = 999;
    while (i < nums.length && j < nums.length) {
        // 如果i和j指向同一个值，就把这个值给目标和
        if (i === j) {
            result = nums[i];
        }
        // 滑动窗口或双指针核心算法
        if (result < s) {
            // 如果目标和小于目标值j指针向后移动，并加上对应的值
            j++;
            result = result + nums[j];
        } else {
            // 如果目标和大于等于目标值则i指针向后移动，并减去对应的值
            result = result - nums[i];
            min = Math.min(j - i + 1, min);
            i++;
        }
    }
    return min;
}
console.log(minSubArrayLen(7, [2, 3, 1, 2, 4, 3]));